#include <iostream>
using namespace std;

/*
     情况二：A派生出B，B派生出C   C接着派生(重点)
        直接父类：Cat就是波斯猫的直接父类
        间接父类：Animal就是波斯猫的间接父类
        Animal --》Cat --》波斯猫 --》其他猫
          环状继承(菱形继承)
                A动物
             哺乳B   C猫科
                 D豹子
     产生的问题：
       问题一：A被构建了多次，浪费了存储空间(希望A只构建一次)
       问题二：二义性问题，通过D去调用A里面的方法有两条途径(一条通过B调用，还有一条通过C调用)
*/

class Animal
{
public:
    Animal()
    {
        cout << "Animal" << endl;
    }
    void eat()
    {
        cout << "Animal eat" << endl;
    }
};

class Catamount : public Animal
{
public:
    Catamount()
    {
        cout << "Catamount" << endl;
    }
    void eat()
    {
        cout << "catamount eat" << endl;
    }
};

class Mammal : public Animal
{
public:
    Mammal()
    {
        cout << "Mammal" << endl;
    }
    void eat()
    {
        cout << "mammal eat" << endl;
    }
};

class Cat : public Catamount, public Mammal
{
public:
    Cat()
    {
        cout << "Cat" << endl;
    }
    void eat()
    {
        cout << "cat eat" << endl;
    }
};

int main()
{
    Cat c;
    c.eat();

    // c.Animal::eat();   //二义性问题  Catamount 和 Mammal 都有Animal

    return 0;
}